home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / xmem.arc / XMEM.ASM next >
Assembly Source File  |  1986-01-24  |  3KB  |  103 lines

  1. PTOTAL    EQU    42H    ;DEFINE EMM FUNCTION CODES
  2. PCOUNT    EQU    4BH
  3. PBYPROC    EQU    4DH
  4. DISPLAY    MACRO        ;DISPLAY STRING AT DS:SI
  5.     MOV    DX,DI
  6.     MOV    AH,9
  7.     INT    21H
  8.     ENDM
  9. EMMCALL    MACRO    FUNCT
  10.     LOCAL    NOERR
  11.     MOV    AH,FUNCT
  12.     INT    67H    ;PERFORM EMM FUNCTION
  13.     OR    AH,AH    ;TEST FOR ERRORS
  14.     JZ    NOERR
  15.     LEA    DI,ERR$    ;IF ERROR, EXIT W/MESSAGE
  16.     JMP    EXIT
  17. NOERR:            ;CONTINUE HERE IF NO ERROR
  18.     ENDM
  19. CODE    SEGMENT
  20.     ASSUME CS:CODE, DS:CODE, ES:CODE
  21.     ORG    100H
  22. XMEM    PROC
  23.     JMP    PASTDATA
  24. ERR$    DB    'Expanded Memory Error',13,10,'$'
  25. TOTALK$ DB    '     0 K Total Expanded Memory',13,10,'$'
  26. EACHK$  DB    '       K used by process'
  27. PRNUM$  DB    0,0,0,0,0,0,13,10,'$'
  28. FREE$   DB    '       K free',13,10,'$'
  29. EMMNAME DB    'EMMXXXX0'    ;NAME OF EMM DEVICE DRIVER
  30. FREEPAGES    DW    0    ;UNALLOCATED PAGE COUNT
  31. PAGES    DW    256 DUP (0,0)    ;ARRAY OF PAGE COUNTS
  32. PASTDATA:    PUSH    ES
  33.     MOV    AX,3567H    ;GET INT 67 VECTOR
  34.     INT    21H
  35.     MOV    DI,10        ;POINT TO DEVICE NAME
  36.     LEA    SI,EMMNAME    ;POINT TO EMM NAME
  37.     MOV    CX,8
  38.     CLD
  39.     REPE    CMPSB        ;IS EMM INSTALLED?
  40.     LEA    DI,TOTALK$    ;MSG IN CASE IT ISN'T
  41.     JNE    EXIT        ;EXIT IF NO EMM
  42.     POP    ES
  43.     EMMCALL    PTOTAL        ;DETERMINE TOTAL PAGE COUNT
  44.     MOV    AX,DX        ;PAGE COUNT RETURNED IN DX
  45.     MOV    FREEPAGES,AX    ;SAVE IT
  46.     LEA    DI,TOTALK$
  47.     CALL    P2K        ;CONVERT PAGES TO K
  48.     DISPLAY
  49.     LEA    DI,PAGES    ;POINT TO ARRAY OF PAGE COUNTS
  50.     EMMCALL    PBYPROC        ;GET PAGES PER PROCESS EjE
  51.     EMMCALL PCOUNT        ;GET EMM PROCESS COUNT
  52.     MOV    CX,BX        ;PROCESS COUNT TO CX
  53.     JCXZ    X2        ;SKIP IF NO EMM PROCESSES
  54.     MOV    SI,DI        ;POINT SI TO PAGE ARRAY
  55. X1:    LODSW            ;GET PROCESS ID
  56.     CBW            ;CONVERT LOW BYTE ONLY
  57.     LEA    DI,PRNUM$
  58.     CALL    I2ASC        ;CONVERT # TO ASCII
  59.     LODSW            ;GET PAGES FOR THIS PROCESS
  60.     SUB    FREEPAGES,AX    ;UPDATE FREE PAGE COUNT
  61.     LEA    DI,EACHK$
  62.     CALL    P2K        ;CONVERT PAGES TO ASCII K
  63.     DISPLAY            ;DISPLAY PROCESS COUNT
  64.     LOOP    X1        ;CONTINUE FOR ALL PROCESSES
  65. X2:    MOV    AX,FREEPAGES
  66.     LEA    DI,FREE$
  67.     CALL    P2K
  68. EXIT:    DISPLAY            ;DISPLAY LAST MESSAGE
  69.     INT    20H        ;THAT'S ALL, FOLKS
  70. XMEM    ENDP
  71. P2K    PROC
  72.     SHL    AX,1        ;KBYTES = PAGES * 16
  73.     SHL    AX,1
  74.     SHL    AX,1
  75.     SHL    AX,1
  76. I2ASC:    PUSH    DI        ;ENTER HERE IF # IS NOT PAGES
  77.     PUSH    CX
  78.     CLD
  79.     PUSH    AX
  80.     MOV    AL,' '        ;BLANK OUT STRING
  81.     MOV    CX,6
  82.     REP    STOSB
  83.     DEC    DI        ;POINT AT STRING END
  84.     MOV    BX,10        ;BASE TEN DIVISOR
  85.     POP    AX        ;GET BINARY NUMBER INTO AX
  86.     STD            ;MOVE BACKWARDS THRU STRING
  87. DIVLOOP:    CWD        ;CONVERT TO DBL WORD IN DX,AX
  88.     DIV    BX        ;QUOTIENT IN AX, REMNDR IN DX
  89.     XCHG    AX,DX        ;EXCHANGE QUOT & REM
  90.     OR    AX,30H        ;CONVERT TO ASCII CHAR IN STRING
  91.     STOSB            ;STORE ASCII CHAR IN STRING
  92.     MOV    AX,DX        ;RESTORE QUOTIENT TO AX
  93.     OR    AX,AX        ;TEST IF MORE DEC DIGITS
  94.     JNZ    DIVLOOP
  95.     POP    CX        ;RESTORE & EXIT
  96.     POP    DI
  97.     CLD
  98.     RET
  99. P2K    ENDP
  100. CODE    ENDS
  101.     END    XMEM
  102.     
  103.